package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 具体实现类：
 * 1：HashSet【常用】：由哈希算法实现保存数据集合+
 * 特点：不保证元素顺序   不允许元素重复  可以存null值
 * Set的方法HashSet 方法一致
 * 2：LinkedHashSet【偶尔用】：可以存null，不允许元素重复，包装元素顺序
 * 3：TreeSet【基本不用】 不允许元素重复  不可以存null值，保证元素顺序，比较器对元素进行排序
 */
public class SetAPI {
    @Test
    public void testSet() {
        //创建Set集合--多态方式---保证数据唯一性
        Set<String> set = new HashSet<>();
        //add() 父类Set的方法 | 子类 HashSet  add()--子类重写的方法
        set.add(new String("蒸鹿尾"));
        set.add(new String("烧花鸭"));
        set.add(new String("烧雏鸡"));
        set.add(new String("烧子鹅"));
        set.add(null);
        set.add(null);
        System.out.println("set集合打印：" + set);
        //remove方法--重写与Collection
        set.remove("烧雏鸡");  //返回值：boolean
        System.out.println("删除set集合元素：" + set);
        boolean b = set.contains("烧雏鸡");
        System.out.println("判断元素是否存在Set集合中：" + b);
        System.out.println("set集合元素个数：" + set.size());
       /*  set.clear();
        System.out.println("是否清空set集合:" + set);*/
        //使用Iterator  遍历Set集合数据
        //1.通过set集合 调用 iterator() 返回：Iterator 实例【迭代器对
        Iterator<String> it = set.iterator();
        //2，遵循迭代器使用规则：问，取，删--删除null值
        while (it.hasNext()) {//问：集合是否有数据
            String str = it.next();   //取：获取元素
            if (str==null) {
                it.remove();//删
            }
        }
        //3，迭代器打印元素：数据
        System.out.println("set集合打印元素:" + set);
    }
}
